최적화
컴파일러 최적화 (Optimization)
Flat AST, Speculative Optimization, E-Graph
1. Flat AST (평탄화된 AST)
- 일반 AST는 깊은 트리 구조 → 탐색이 느림
- Flat AST는 중첩 구조를 배열처럼 나열
장점
- 탐색/처리 속도 향상
- 트리보다 배열이 메모리 효율적
2. Speculative Optimization (추측 기반 최적화)
자주 실행되는 패턴을 미리 추측해서 빠르게 실행할 수 있게 변환
function add(x, y) {
return x + y;
}
add(1, 2); // 숫자만 쓰면 → 숫자 전용 최적화 코드 생성
add("a", "b"); // 갑자기 문자열 → 추측 틀림 → Deoptimization
- 추측이 틀리면 → Deoptimization (일반 모드로 되돌림)
- V8의 TurboFan, JavaScriptCore의 DFG JIT이 활용
3. E-Graph (Equality Saturation)
한 표현식의 다양한 수학적/논리적 등가식을 동시에 저장하고 최적의 코드를 선택
(a + b) + c == a + (b + c) == c + (a + b)
- 위 모든 구조를 저장 → 비용이 가장 적은 동치 식을 찾아 사용
- 연산 순서 재배치, 재사용 형태 탐색
관련 개념
- 컴파일러 처리 과정 - JIT 단계에서 최적화 적용
- 코드 생성 - 최적화 전 중간 코드